<?php

/*
 * Copyright 2008 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#namespace tehframework\filtering;

#use tehframework\testing\phpunit\TestCase;

require_once 'test/testHelper.php';

class FilterChainTest extends TestCase
{
	public function beforeTest()
	{
		TestFilter::$calls = 0;
	}
	
	function testConstructorRegistersSpecifiedFilters()
	{
		$chain = new FilterChain(array(
			new TestFilter(), new TestFilter(), new TestFilter()
		));
		
		$this->assertSame(3, count($chain),
			'Number of filters in the chain is not equal to the number of filters ' .
			'passed to the constructor.'
		);
	}
	
	function testRegisterFilterAddsSpecifiedFilterToStack()
	{
		$chain = new FilterChain();
		$chain
			->registerFilter(new TestFilter())
			->registerFilter(new TestFilter())
			->registerFilter(new TestFilter(false))
			->filterValue('test');
		
		$this->assertSame(1, TestFilter::$calls,
			'Filters are registered in wrong order.');
	}
	
	function testFilterValueExecutesRegisteredFilters()
	{
		$chain = new FilterChain();
		$chain
			->registerFilter(new TestFilter())
			->registerFilter(new TestFilter())
			->registerFilter(new TestFilter());
		
		$this->assertSame('test-1-2-3', $chain->filterValue('test'));
	}
}